﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace NetworkData.Spider
{
    /// <summary>
    /// Attribute holds one attribute, as is normally stored in
    /// an HTML or XML file. This includes a name, value and delimiter.
    /// 	
    /// This spider is copyright 2003 by Jeff Heaton. However, it is
    /// released under a Limited GNU Public License (LGPL). You may 
    /// use it freely in your own programs. For the latest version visit
    /// http://www.jeffheaton.com.
    ///
    /// </summary>
    public class Attribute : ICloneable
    {
        /// <summary>
        /// The name of this attribute
        /// </summary>
        private string _mName;

        /// <summary>
        /// The value of this attribute
        /// </summary>
        private string _mValue;


        /// <summary>
        /// The delimiter for the value of this
        /// attribute(i.e. " or ').
        /// </summary>
        private char _mDelim;


        /// <summary>
        /// Construct a new Attribute.  The name, delim and value
        /// properties can be specified here.
        /// </summary>
        /// <param name="name">The name of this attribute.</param>
        /// <param name="value">The value of this attribute.</param>
        /// <param name="delim">The delimiter character for the value.</param>
        public Attribute(string name, string value, char delim)
        {
            _mName = name;
            _mValue = value;
            _mDelim = delim;
        }



        /// <summary>
        /// The default constructor.  Construct a blank attribute.
        /// </summary>
        public Attribute()
            : this("", "", (char)0)
        {
        }


        /// <summary>
        /// Construct an attribute without a delimiter.
        /// </summary>
        /// <param name="name">The name of this attribute.</param>
        /// <param name="value">The value of this attribute.</param>
        public Attribute(String name, String value)
            : this(name, value, (char)0)
        {
        }

        /// <summary>
        /// The delimiter for this attribute.
        /// </summary>
        public char Delim
        {
            get
            {
                return _mDelim;
            }

            set
            {
                _mDelim = value;
            }
        }


        /// <summary>
        /// The name for this attribute.
        /// </summary>
        public string Name
        {
            get
            {
                return _mName;
            }

            set
            {
                _mName = value;
            }
        }

        /// <summary>
        /// The value for this attribute.
        /// </summary>
        public string Value
        {
            get
            {
                return _mValue;
            }

            set
            {
                _mValue = value;
            }
        }




        #region ICloneable Members
        public virtual object Clone()
        {
            return new Attribute(_mName, _mValue, _mDelim);
        }
        #endregion
    }
}
